package global;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * 发送电子邮件公共类.
 * 传入参数
 * 参数：接收人的邮件地址
 * 参数：邮件的标题
 * 参数：邮件的内容
 * 邮件发送统一采用html格式
 * <p>
 * 创建日期：2010-07-01<br>
 * 创建人：Xiyt<br>
 * 修改日期：<br>
 * 修改人：<br>
 * 修改内容：<br>
 * 
 * @author Xiyt
 * @version 1.0
 */
public class SendEmail {

	/**
	 * 邮箱地址
	 */
	String toaddress = null;
	/**
	 * 邮件标题
	 */
	String title = null;
	/**
	 * 邮件主题
	 */
	String body = null;

	/**
	 * 
	 * 构造函数
	 * 
	 * @param toaddress
	 *            邮箱地址
	 * @param title
	 *            邮件标题
	 * @param body
	 *            邮件主题
	 */
	public SendEmail(String toaddress, String title, String body) {
		this.toaddress = toaddress;
		this.title = title;
		this.body = body;

	}

	/**
	 * 
	 * 发送邮件
	 */
	public boolean execSend() throws Exception {

		Properties props = new Properties();
		props.put("mail.smtp.host", Constants.EMAIL_SMTP_HOST);// 定义邮件服务器的地址
		props.put("mail.smtp.auth", "true");

		// 取得Session
		Session session = Session.getDefaultInstance(props,

		new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(Constants.EMAIL_ACCOUNT,
						Constants.EMAIL_PASSWORD);
			}
		});

		MimeMessage message = new MimeMessage(session);

		// 邮件标题
		message.setSubject(this.title);
		// 发件人的邮件地址
		message.setFrom(new InternetAddress(Constants.EMAIL_ACCOUNT));
		// 接收邮件的地址
		message.addRecipient(Message.RecipientType.TO, new InternetAddress(
				this.toaddress));
		// 邮件发送的时间日期
		message.setSentDate(new Date());
		// 新建一个MimeMultipart对象用来存放BodyPart对象 related意味着可以发送html格式的邮件
		Multipart mp = new MimeMultipart("related");
		// 新建一个存放信件内容的BodyPart对象
		BodyPart bodyPart = new MimeBodyPart();// 正文
		// 给BodyPart对象设置内容和格式/编码方式
		bodyPart.setContent(this.body, "text/html;charset=utf-8");
		// 将BodyPart加入到MimeMultipart对象中
		mp.addBodyPart(bodyPart);
		// 设置邮件内容
		message.setContent(mp);
		
		// 发送邮件
		Transport.send(message);
		return true;
	}
}